'use strict';
exports.main = async (event, context) => {
  const db = uniCloud.database();
  const _ = db.command;
  
  try {
    // 1. 参数验证
    if (!event.user_id || !event.item_id) {
      throw new Error('缺少必要参数');
    }

    // 2. 获取商品信息
    const itemRes = await db.collection('items').doc(event.item_id).get();
    if (!itemRes.data || itemRes.data.length === 0) {
      throw new Error('商品不存在');
    }
    const item = itemRes.data[0];

    // 3. 获取用户信息
    const userRes = await db.collection('users').doc(event.user_id).get();
    if (!userRes.data || userRes.data.length === 0) {
      throw new Error('用户不存在');
    }
    const user = userRes.data[0];

    // 4. 业务验证
    if (item.stock <= 0) return { code: 400, msg: '商品已售罄' };
    if (user.points < item.points) return { code: 400, msg: '积分不足' };

    // 5. 使用普通操作替代事务（解决事务限制问题）
    const newStock = item.stock - 1;
    const newPoints = user.points - item.points;
    
    // 按顺序执行操作
    await db.collection('items').doc(event.item_id).update({
      stock: newStock
    });
    
    await db.collection('users').doc(event.user_id).update({
      points: newPoints
    });
    
    // 兑换记录可能会失败但不影响主流程
    try {
      await db.collection('exchange_history').add({
        user_id: event.user_id,
        item_id: event.item_id,
        points: item.points,
        item_name: item.name,
        exchange_time: new Date(),
        status: 'completed'
      });
    } catch (e) {
      console.error('记录兑换日志失败:', e);
    }
    
    return {
      code: 0,
      data: {
        points: newPoints,
        new_stock: newStock,
        item_name: item.name
      }
    };
  } catch (e) {
    console.error('兑换流程异常:', e);
    return {
      code: 500,
      msg: '系统处理异常',
      debug: e.message
    };
  }
};